﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ProtoType
{
    class PrototypeCls:ICloneable
    {
        /*
         * 原型模式
         *
         *
         * 提到原型模式   咱们就得说说引用传递和值传递。
         * 栈中的数据，像Int  float struct派生出来的数据，传递类型的时候是值传递
         * 自定义类型 Class  ，在进行赋值传递的时候是引用传递，也就是传递的是引用的地址
         * 如果都是值传递，那也就没有原型模式了。
         *
         *
         *
         * 举个例子，我有一个Person 小白=new Person{   Name="小白"，gender="女" Attribute="美"}
         * 我想在得到一个一模一样的对象怎么玩。。
         * Person 小黑= 小白？？？不好意思  是值传递，  小白和小黑会指向堆内存中的同一块地址
         *
         * 这时候  C#  为我们提供了ICloneable这个接口
         * 实现MenberWIseClone 这个方法，就能得到一个新的对象，属性和小白完全一样，但是还不是同一块内存
         */

        public string Name { get; set; }
        public object Clone()
        {
            return this.MemberwiseClone();
        }
    }
}
